////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                                            //
//                                                         WNProject                                                          //
//                                                                                                                            //
//            This file is distributed under the BSD 2-Clause open source license. See License.txt for details.               //
//                                                                                                                            //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#pragma once

#ifndef __WN_SCRIPTING_SCRIPTING_ENGINE_DATA_H__
#define __WN_SCRIPTING_SCRIPTING_ENGINE_DATA_H__

#include "WNCore/inc/WNTypes.h"

namespace llvm {
    class IRBuilderBase;
    class Module;
    class ExecutionEngine;
    class FunctionPassManager;
};
namespace WNScripting {
    class WNScopedVariableList;
    class WNTypeManager;
    class WNIdentifierMap;
    class WNFunctionManager;
    class WNScriptingEngine;

    struct WNScriptingEngineData {
        WNScriptingEngineData():
            mBuilder(WN_NULL),
            mModule(WN_NULL),
            mExecutionEngine(WN_NULL),
            mScopedVariableList(WN_NULL),
            mTypeManager(WN_NULL),
            mIdentifierMap(WN_NULL),
            mFunctionManager(WN_NULL) {
        }

        llvm::IRBuilderBase*        mBuilder;
        llvm::Module*               mModule;
        llvm::ExecutionEngine*      mExecutionEngine;
        llvm::FunctionPassManager*  mFunctionPassManager;
        WNScopedVariableList*       mScopedVariableList;
        WNTypeManager*              mTypeManager;
        WNIdentifierMap*            mIdentifierMap;
        WNFunctionManager*          mFunctionManager;
        WNScriptingEngine*          mScriptingEngine;
    };
}
#endif // __WN_SCRIPTING_SCRIPTING_ENGINE_H__
